/*
 * Copyright 2015-2025 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package io.github.wywuzh.commons.dingtalk.enums;

/**
 * 类ErrorCode的实现描述：错误码
 *
 * @author <a href="mailto:wywuzh@163.com">伍章红</a> 2021-01-28 12:40:20
 * @version v2.3.8
 * @since JDK 1.8
 */
public enum ErrorCode {

    OK(0, "请求成功"), SYSTEM_BUSY(-1, "系统繁忙"), // 服务器暂不可用，建议稍后再重试1次，最多重试3次
    AUTHC_FAIL(88, "鉴权异常"), // 关注返回结果里的subCode和subMsg
    NOT_FOUND(404, "请求的URI地址不存在"), // 地址不存在，检查下url是否和文档里写的一致

    E33001(33001, "无效的企业ID"), // 请确认access_token是否正确。
    E33002(33002, "无效的微应用的名称"), // 校验微应用的名称字段，不能为空且长度不能超过10个字符。
    E33003(33003, "无效的微应用的描述"), // 校验微应用的描述字段，不能为空且长度不能超过20个字符。
    E33004(33004, "无效的微应用的ICON"), // 校验微应用的icon字段，不能为空且确保图标存在。
    E33005(33005, "无效的微应用的移动端主页"), // 校验微应用的移动端主页，不能为空且必须以http开头或https开头
    E33006(33006, "无效的微应用的PC端主页"), // 校验微应用的PC端主页，必须以http开头或https开头。
    E33007(33007, "微应用的移动端的主页与PC端主页不同"), // 校验微应用的PC端主页，确保它和移动端主页的域名保持一致。
    E33008(33008, "无效的微应用OA后台的主页"), // 校验下微应用的后台管理的主页失败，必须以http开头或https开头。
    E33012(33012, "无效的USERID"), // 请检查userid是否正确，可通过获取部门用户userid列表接口获取。
    E34001(34001, "无效的会话id"), // 检查下所传的chatId字段是否为空。可通过创建群会话接口获取chatId。
    E34002(34002, "无效的会话消息的发送者"), // 检查下sender字段是否为空。
    E34003(34003, "无效的会话消息的发送者的企业Id"), // 检查下发送者的企业Id。可在开发者后台首页获取。
    E34004(34004, "无效的会话消息的类型"), // 检查下msgtype字段，是否为空，是否是定义的类型。msgtype请参考消息类型与数据格式。
    E34006(34006, "发送者不在企业中"), // 检查下发送者是否在企业中。可通过获取部门用户基础信息查看。
    E34007(34007, "发送者不在会话中"), // 检查下发送者是否在会话id中。可通过查询群成员接口查看。
    E34008(34008, "图片不能为空"), // 如果发的是图片消息，检查下图片是否为空。
    E34009(34009, "链接内容不能为空"), // 检查下messageUrl字段是否为空。
    E34010(34010, "文件不能为空"), // 检查下media_id字段是否为空。可通过上传媒体文件接口获取。
    E34011(34011, "音频文件不能为空"), // 检查下media_id字段是否为空。可通过上传媒体文件接口获取。
    E34012(34012, "找不到发送者的企业"), // 检查下发送者是否是真实的。可通过获取部门用户userid列表接口获取。
    E34013(34013, "找不到群会话对象"), // 检查下chatid是否真实存在。可通过获取群会话信息接口查看。
    E34014(34014, "会话消息的json结构无效或不完整"), // 检查下消息的json格式是否正确，json的key对应msgtype的value值。
    E34015(34015, "发送群会话消息失败"), // 消息发送失败，建议稍后再重试下。
    E34016(34016, "会话消息的内容超长"), // 检查下消息的content字段长度是否超过5000，title字段长度是否超过64，markdown字段长度是否超过5000，single_title字段长度是否超过20，single_url字段长度是否超过500，btn_json_list字段长度是否超过1000。
    E34018(34018, "角色信息不能为空"), // 检查参数roleName、groupId是否正确。
    E40001(40001, "获取access_token时Secret错误，或者access_token无效"), // 检查下access_token是否正确。
    E40002(40002, "不合法的凭证类型"), // 无。
    E40003(40003, "不合法的UserID"), // 确保该id在通讯录中存在，且是在你所传access_token对应的企业里。可通过获取部门用户userid列表接口获取。
    E40004(40004, "不合法的媒体文件类型"), // 检查下type字段，只支持image、voice、file。
    E40005(40005, "不合法的文件类型"), // 如果是文件类型，检查下是否是支持。目前只支持doc、docx、xls、xlsx、ppt、pptx、zip、pdf、rar。
    E40006(40006, "不合法的文件大小"), // 检查下文件大小，image类型最大1MB，file类型最大10MB，voice类型最大2MB。
    E40007(40007, "不合法的媒体文件id"), // 检查下mediaId是否为空，是否真实存在。可通过上传媒体文件接口获取。
    E40008(40008, "不合法的消息类型"), // 检查下msgtype是否为空，确保它在开放平台定义的几种类型里，msgtype请参考消息类型与数据格式
    E40009(40009, "不合法的部门id"), // 检查下部门id是否为空，是否为数字且大于0。可通过获取部门列表接口查看。
    E40010(40010, "不合法的父部门id"), // 检查父部门id是否为一个数字。可通过获取指定用户的所有父部门列表或获取指定部门的所有父部门列表接口获取。
    E40011(40011, "不合法的排序order"), // 检查下order字段是否为空，是否为数字且大于0。
    E40012(40012, "不合法的发送者"), // 检查下sender字段是否为空，是否真实存在。
    E40013(40013, "不合法的corpid"), // 检查下corpid是否有效。corpid参数可在开发者后台首页获取。
    E40014(40014, "不合法的access_token"), // 检查下access_token是否正确。（注意：access_token这个参数应该是带在url后面的。）
    E40015(40015, "发送者不在会话中"), // 检查下sender字段和cid字段是否能对应上。
    E40016(40016, "不合法的会话ID"), // 检查下cid字段是否为空，是否有效。
    E40017(40017, "在会话中没有找到与发送者在同一企业的人"), // cid对应的消息接收者为空，检查下cid字段。
    E40018(40018, "不允许以递归方式查询部门用户列表"), // 检查下fetchChild字段，目前不支持递归查询。
    E40019(40019, "该手机号码对应的用户最多可以加入5个非认证企业"), // 更换手机号码后重试。
    E40020(40020, "当前团队人数已经达到上限，用电脑登录钉钉企业管理后台，升级成为认证企业"), // 用电脑登录钉钉企业管理后台，升级成为认证企业。
    E40021(40021, "更换的号码已注册过钉钉，无法使用该号码"), // 使用未注册钉钉的手机号。
    E40022(40022, "企业中的手机号码和登录钉钉的手机号码不一致，暂时不支持修改用户信息，可以删除后重新添加"), // 暂时不支持修改用户信息，可以删除后重新添加。
    E40023(40023, "部门人数达到上限"), // 部门人数不能超过1000。
    E40024(40024, "(安全校验不通过)保存失败，团队人数超限。请在手机钉钉绑定支付宝完成实名认证，或者申请企业认证，人数上限自动扩充"), // 手机绑定支付宝完成实名认证或者申请企业认证，人数上限自动扩充。
    E40025(40025, "无效的部门JSONArray对象，合法格式需要用中括号括起来，且如果属于多部门，部门id需要用逗号分隔"), // 合法格式需要用中括号括起来，且如果属于多部门，部门id需要用逗号分隔。
    E40029(40029, "不合法的oauth_code"), // 无。
    E40031(40031, "不合法的UserID列表"), // 指定的UserID列表，至少存在一个UserID不在通讯录中。
    E40032(40032, "不合法的UserID列表长度"), // 检查下列表是否为空，且长度合适。创建部门接口的userPerimits最多接收10000个。
    E40033(40033, "不合法的请求字符，不能包含\\uxxxx格式的字符"), // 检查请求字符是否正确，不能包含\\uxxxx格式的字符。
    E40035(40035, "不合法的参数"), // 检查下有没有传请求参数，一般发生在http post形式的接口里，没有传参数。
    E40038(40038, "不合法的请求格式"), // 检查下参数中是不是少了某个字段，具体参考各个文档的参数介绍。
    E40039(40039, "不合法的URL长度"), // 无。
    E40048(40048, "url中包含不合法domain"), // 发消息接口中消息url链接不安全。
    E40056(40056, "不合法的agentid"), // 检查下agentid字段是否为空，是否真实存在。
    E40057(40057, "不合法的callbackurl"), // 无。
    E40061(40061, "设置应用头像失败"), // 无。
    E40062(40062, "不合法的应用模式"), // 无。
    E40063(40063, "不合法的分机号"), // tel字段长度超长，长度不能超过50。
    E40064(40064, "不合法的工作地址"), // workPlace长度超长，长度不能超过50个字符。
    E40065(40065, "不合法的备注"), // remark长度超长，长度不能超过1024个字符。
    E40066(40066, "不合法的部门列表"), // 部门id列表长度太长，不能超过10000，并且每个id必须是数字。
    E40067(40067, "标题长度不合法"), // 检查下标题长度。
    E40068(40068, "不合法的偏移量"), // 偏移量必须大于0。
    E40069(40069, "不合法的分页大小"), // 分页大小不合法，具体参考每个接口的参数定义。
    E40070(40070, "不合法的排序参数"), // 具体参考获取部门成员接口里面对order字段的定义。
    E40073(40073, "不存在的openid"), // openid不能为空。可通过根据sns临时授权码获取用户信息接口获取。
    E40077(40077, "不存在的预授权码"), // 无。
    E40078(40078, "不存在的临时授权码"), // 临时授权码不能为空，且只能被使用一次，可参见以下接口：小程序：免登授权码H5微应用：免登流程
    E40079(40079, "不存在的授权信息"), // 检查下企业是否授权，授权方法参考应用授权。
    E40080(40080, "不合法的suitesecret"), // 无。
    E40082(40082, "不合法的suitetoken"), // 检查下token。
    E40083(40083, "不合法的suiteid"), // suiteKey字段不合法。
    E40084(40084, "不合法的永久授权码"), // 检查下永久授权码是否正确。可通过获取授权企业的永久授权码接口获取。
    E40085(40085, "不存在的suiteticket"), // 检查下suiteticket是否正确，确保是由回调接口正确来接收suiteticket。
    E40086(40086, "不合法的第三方应用appid"), // appid字段不能为空。
    E40087(40087, "创建永久授权码失败"), // 稍后再重试下，确保参数都传对。
    E40088(40088, "不合法的套件key或secret"), // 稍后再重试下，确保suiteKey和suiteSecret都传对且一一对应。
    E40089(40089, "不合法的corpid或corpsecret"), // 如果你使用的是corpsecret，请稍后再重试下，确保corpid和corpsecret字段传对且一一对应。
    E40090(40090, "套件已经不存在"), // 检查下suiteKey字段是否正确。
    E40091(40091, "用户授权码创建失败，需要用户重新授权"), // 创建永久授权码失败，需要用户重新授权产生临时授权码。
    E40103(40103, "用户开启了账号保护，无法被加入到您的团队"), // 由于通讯录添加新用户的保护机制导致。如一个员工已经存在于一个A企业，且A为认证企业，B企业再添加该员工的时候会提示。可以让该员工在钉钉客户端搜索“成员邀请”查看邀请信息，并点击加入。
    E40104(40104, "无效手机号"), // 检查手机号格式是否正确。
    E41001(41001, "缺少access_token参数"), // 检查下access_token是否传了，注意该参数必须跟在请求url中。
    E41002(41002, "缺少corpid参数"), // 检查下corpid是否为空。corpid参数可在开发者后台首页获取。
    E41003(41003, "缺少refresh_token参数"), // 检查下refresh_token是否为空。
    E41004(41004, "检查下secret参数是否为空"), // 检查下secret参数是否为空。
    E41005(41005, "缺少多媒体文件数据"), // 无。
    E41006(41006, "缺少media_id参数"), // 检查下media_id参数是否为空。可通过上传媒体文件接口获取。
    E41007(41007, "无效的ssocode"), // sso的永久授权code无效，检查下是否为空，可参见获取微应用后台免登的access_token。
    E41008(41008, "缺少oauth"), // 无。
    E41009(41009, "缺少UserID"), // 检查下UserID是否为空。
    E41010(41010, "缺少url"), // 检查下url是否为空。
    E41011(41011, "缺少agentid"), // 检查下agentid是否为空。
    E41012(41012, "缺少应用头像mediaid"), // 检查下mediaid是否为空。可通过上传媒体文件接口获取。
    E41013(41013, "缺少应用名字"), // 检查应用名字是否为空。
    E41014(41014, "缺少应用描述"), // 检查应用描述是否为空。
    E41015(41015, "缺少JSON参数"), // 检查JSON参数是否为空。
    E41021(41021, "缺少suitekey"), // 检查suitekey参数是否为空。
    E41022(41022, "缺少suitetoken"), // 检查suitetoken参数是否为空。
    E41023(41023, "缺少suiteticket"), // 检查suiteticket参数是否为空。
    E41024(41024, "缺少suitesecret"), // 检查suitesecret参数是否为空。
    E41025(41025, "缺少permanent_code"), // 检查permanent_code永久授权码参数是否为空。可通过获取授权企业的永久授权码接口获取。
    E41026(41026, "缺少tmp_auth_code"), // 检查tmp_auth_code临时授权码参数是否为空。可参见企业授权开通应用事件。说明 临时授权码只能使用一次。
    E41027(41027, "需要授权企业的corpid参数"), // 检查corpid参数是否为空。corpid参数可在开发者后台首页获取。
    E41028(41028, "禁止给全员发送消息"), // 检查是否有全员发送消息的权限，ISV没有该权限。
    E41029(41029, "超过消息接收者人数上限"), // 发送OA消息人数超上限。企业消息人数上限：5000ISV消息人数上限：1000
    E41030(41030, "企业未对该套件授权"), // 检查该企业是否已经对该套件进行授权。
    E41031(41031, "auth_corpid和permanent_code不匹配"), // 激活套件时使用的auth_corpid和permanent_code不匹配。授权企业的auth_corpid可在开发者后台首页获取。
    E41041(41041, "查询间隔时间太长"), // 考勤打卡数据查询间隔时间超过7天。
    E41044(41044, "禁止发送消息"), // 检查是否有权限发送消息。
    E41045(41045, "超过发送全员消息的次数上限"), // 发送全员消息的次数，每天最多3次。
    E41046(41046, "超过发送全员消息的每分钟次数上限"), // 企业OA消息全员发送每天不能超过3次，ISV不能发送全员消息。
    E41047(41047, "超过给该企业发消息的每分钟人次上限"), // 企业OA消息每分钟不能超过1500次，ISV OA消息每分钟不能超过200次。
    E41048(41048, "超过给企业发消息的每分钟次数总上限"), // 无。
    E41049(41049, "包含违禁内容"), // 检查消息文本中是否有黄色、反动等词语。
    E41050(41050, "无效的活动编码"), // 无。
    E41051(41051, "活动权益的校验失败"), // 无。
    E41054(41054, "暂时无法更换手机号，如需修改请删除用户后重试"), // 暂不支持修改手机号，请先将员工删除后再进行修改操作。
    E41100(41100, "时间参数不合法"), // 时间参数不能为空，且格式为：“yyyy-MM-dd hh:mm:ss”。
    E41101(41101, "数据内容过长"), // 请求体字符长度不能大于4096。
    E41102(41102, "参数值过大"), // 上传文件或者idlist等参数过大。
    E42001(42001, "access_token超时"), // 请检查网络状态。
    E42002(42002, "refresh_token超时"), // 请检查网络状态。
    E42003(42003, "oauth_code超时"), // 请检查网络状态。
    E42007(42007, "预授权码失效"), // 请检查该预授权码是否已经使用过。
    E42008(42008, "临时授权码失效"), // 请检查该临时授权码是否已经使用过或者是否不正确。
    E42009(42009, "suitetoken失效"), // 请检查该suitetoken是否已经过期。
    E43001(43001, "需要GET请求"), // 请检查http请求方式是否正确。
    E43002(43002, "需要POST请求"), // 请检查http请求方式是否正确。
    E43003(43003, "需要HTTPS"), // 请检查调用接口协议是否是https。
    E43004(43004, "无效的HTTP HEADER Content-Type"), // 请检查请求头中的content-type是否正确。
    E43005(43005, "需要Content-Type为application/json;charset=UTF-8"), // 请检查请求头中的content-type是否是“application/json;charset=UTF-8”。
    E43007(43007, "需要授权"), // 该接口需要access_token才能调用。
    E43008(43008, "参数需要multipart类型"), // 检查提交参数中的ENCTYPE是否是multipart类型。
    E43009(43009, "post参数需要json类型"), // 请检查post参数数据是否是json类型。
    E44001(44001, "多媒体文件为空"), // 请检查多媒体文件数据是否为空。可通过上传媒体文件接口获取。
    E44002(44002, "POST的数据包为空"), // 请检查POST的数据包是否为空。
    E44003(44003, "图文消息内容为空"), // 请检查图文消息参数是否为空。
    E44004(44004, "文本消息内容为空"), // 请检查文本消息参数是否为空
    E45001(45001, "多媒体文件大小超过限制"), // 无。
    E45002(45002, "消息内容超过限制"), // 无。
    E45003(45003, "标题字段超过限制"), // 无。
    E45004(45004, "描述字段超过限制"), // 无。
    E45005(45005, "链接字段超过限制"), // 无。
    E45006(45006, "图片链接字段超过限制"), // 无。
    E45007(45007, "语音播放时间超过限制"), // 无。
    E45008(45008, "图文消息超过限制"), // 无。
    E45009(45009, "接口调用超过限制"), // 无。
    E45016(45016, "系统分组，不允许修改"), // 无。
    E45017(45017, "分组名字过长"), // 无。
    E45018(45018, "分组数量超过上限"), // 无。
    E45024(45024, "账号数量超过上限"), // 无。
    E46001(46001, "不存在媒体数据"), // 无。
    E46004(46004, "不存在的员工"), // 无。
    E47001(47001, "解析JSON/XML内容错误"), // 无。
    E48002(48002, "Api禁用"), // 无。
    E48003(48003, "suitetoken无效"), // 请检查该suitetoken是否已经过期或不正确。
    E48004(48004, "授权关系无效"), // 无。
    E49000(49000, "缺少chatid"), // 请检查参数中是否有chatid。可通过创建群会话接口获取chatId。
    E49001(49001, "绑定的微应用超过个数限制"), // 绑定群会话和微应用超过5个。
    E49002(49002, "一个群只能被一个ISV套件绑定一次"), // 无。
    E49003(49003, "操作者必须为群主"), // 无。
    E49004(49004, "添加成员列表和删除成员列表不能有交集"), // 无。
    E49005(49005, "群人数超过人数限制"), // 无。
    E49006(49006, "群成员列表必须包含群主"), // 无。
    E49007(49007, "超过创建群的个数上限"), // 无。
    E49008(49008, "不合法的群类型，只能传入0或2"), // 无。
    E49009(49009, "企业群不能添加外部联系人，群主只能为企业员工"), // 无。
    E49010(49010, "群成员不能为空"), // 无。
    E49011(49011, "群员工列表超长"), // 无。
    E49012(49012, "群外部联系人列表超长"), // 无。
    E49013(49013, "群主不能为空"), // 无。
    E49014(49014, "非法的群主类型，只能为emp或者ext"), // 无。
    E49015(49015, "不合法的群名称"), // 无。
    E49016(49016, "查询企业员工不存在"), // 无。
    E49017(49017, "查询企业外部联系人不存在"), // 可通过获取外部联系人列表接口获取。
    E49018(49018, "群主非企业员工"), // 无。
    E49019(49019, "群主非企业外部通讯录人员"), // 可通过获取外部联系人列表接口获取。
    E49020(49020, "某人处于勿扰模式，拒绝加入群聊；请先与TA建立好友关系"), // 无。
    E49021(49021, "非好友建立群聊，认证用户一天只能拉50个人，非认证用户一天只能拉10个人"), // 无。
    E49022(49022, "某人拒绝加入群聊"), // 无。
    E49023(49023, "某人处于勿扰模式，拒绝加入群聊；请先与TA建立好友关系"), // 无。
    E50001(50001, "redirect_uri未授权"), // 无。
    E50003(50003, "应用已停用"), // 无。
    E50005(50005, "企业已禁用"), // 无。
    E52010(52010, "无效的corpid"), // 请检查corpid参数是否正确。corpid可在开发者后台首页获取。
    E52011(52011, "jsapi ticket 读取失败"), // 请检查ticket参数是否正确。
    E52012(52012, "jsapi 签名生成失败"), // 请检查url、nonceStr、timestamp、ticket等参数是否正确。
    E52013(52013, "签名校验失败"), // 请检查url、nonceStr、timestamp、ticket等参数是否正确。
    E52014(52014, "无效的url参数"), // 请检查url参数是否正确。
    E52015(52015, "无效的随机字符串参数"), // 请检查nonceStr参数是否正确。
    E52016(52016, "无效的签名参数"), // 请检查url、nonceStr、timestamp、ticket等参数是否正确。
    E52017(52017, "无效的jsapi列表参数"), // 请检查dd.config中的jsApiList参数是否正确。
    E52018(52018, "无效的时间戳"), // 请检查timestamp参数是否正确。
    E52019(52019, "无效的agentid"), // 请检查agentid参数是否正确。
    E60001(60001, "不合法的部门名称"), // 请检查部门名称是否正确，长度不能超过64个字符。
    E60002(60002, "部门层级深度超过限制"), // 无。
    E60003(60003, "部门不存在"), // 可通过获取部门列表接口获取。
    E60004(60004, "父亲部门不存在"), // 可通过获取指定部门的所有父部门列表接口获取。
    E60005(60005, "不允许删除有成员的部门"), // 可通过获取部门用户userid列表接口查看。
    E60006(60006, "不允许删除有子部门的部门"), // 可通过获取子部门ID列表接口查看。
    E60007(60007, "不允许删除根部门"), // 无。
    E60008(60008, "父部门下该部门名称已存在"), // 可通过获取部门列表接口查看。
    E60009(60009, "部门名称含有非法字符"), // 无。
    E60010(60010, "部门存在循环关系"), // 无。
    E60011(60011, "没有调用该接口的权限"), // 需要修改appkey对应的权限点。请上开放平台 > 应用详情页 > 权限管理 > 添加接口权限 > 接口权限勾选对应的权限点。
    E60012(60012, "不允许删除默认应用"), // 无。
    E60013(60013, "不允许关闭应用"), // 无。
    E60014(60014, "不允许开启应用"), // 无。
    E60015(60015, "不允许修改默认应用可见范围"), // 无。
    E60016(60016, "部门id已经存在"), // 可通过获取部门详情接口查看详情。
    E60017(60017, "不允许设置企业"), // 无。
    E60018(60018, "不允许更新根部门"), // 无。
    E60019(60019, "从部门查询人员失败"), // 请检查该成员是否在该部门中。可通过获取部门用户userid列表接口获取。
    E60020(60020, "访问ip不在白名单之中"), // 企业应用：检查配置的服务器出口ip地址是否和请求ip地址一致。isv应用：检查套件ip白名单和请求ip是否一致。
    E60067(60067, "部门的企业群群主不存在"), // 无。
    E60068(60068, "部门的管理员不存在"), // 无。
    E60102(60102, "UserID在公司中已存在"), // 无。
    E60103(60103, "手机号码不合法"), // 无。
    E60104(60104, "手机号码在公司中已存在"), // 删除手机号重新添加或更换未添加过的手机号。
    E60105(60105, "邮箱不合法"), // 无。
    E60106(60106, "邮箱已存在"), // 无。
    E60107(60107, "使用该手机登录钉钉的用户已经在企业中"), // 无。
    E60110(60110, "部门个数超出限制"), // 无。
    E60111(60111, "UserID不存在"), // 无。
    E60112(60112, "用户name不合法"), // 无。
    E60113(60113, "身份认证信息（手机/邮箱）不能同时为空"), // 无。
    E60114(60114, "性别不合法"), // 无。
    E60118(60118, "用户无有效邀请字段（邮箱，手机号）"), // 无。
    E60119(60119, "不合法的position"), // 无。
    E60120(60120, "用户已禁用"), // 无。
    E60121(60121, "找不到该用户"), // 检查该企业下该员工是否存在。
    E60122(60122, "不合法的extattr"), // 无。
    E60123(60123, "不合法的jobnumber"), // 无。
    E60124(60124, "用户不在此群中"), // 无。
    E60125(60125, "CRM配置信息创建失败"), // 无。
    E60126(60126, "CRM配置信息更新失败"), // 无。
    E60127(60127, "CRM人员配置信息删除失败"), // 无。
    E70001(70001, "企业不存在或者已经被解散"), // 无。
    E70002(70002, "获取套件下的微应用失败"), // 无。
    E70003(70003, "agentid对应微应用不存在"), // 无。
    E70004(70004, "企业下没有对应该agentid的微应用"), // 代表应用和企业映射关系的ID (appId的实例化ID)，同一个ISV应用在不同企业的agentId不一致。
    E70005(70005, "ISV激活套件失败"), // 请检查激活套件使用的参数是否正确。
    E71006(71006, "回调地址已经存在"), // 无。
    E71007(71007, "回调地址已不存在"), // 无。
    E71008(71008, "回调call_back_tag必须在指定的call_back_tag列表中"), // 无。
    E71009(71009, "返回文本非success"), // 回调地址返回的内容必须是success文本经过加密后的结果。
    E71010(71010, "POST的JSON数据不包含所需要的参数字段或包含的参数格式非法"), // 无。
    E71011(71011, "传入的url参数不是合法的url格式"), // 合法的URL地址是协议+域名+端口+路径path+参数组成。
    E71012(71012, "url地址访问异常"), // 无。
    E71013(71013, "此域名或IP不能注册或者接收回调事件"), // 回调地址的域名或者IP必须在套件的ip白名单中，并且该ip必须为外网ip。
    E72001(72001, "获取钉盘空间失败"), // 检查domain、agent_id、access_token参数是否正确有效。
    E72002(72002, "授权钉盘空间访问权限失败"), // 无。
    E80001(80001, "可信域名没有IPC备案，后续将不能在该域名下正常使用jssdk"), // 无。
    E81001(81001, "两个用户没有任何关系，请先相互成为好友"), // 无。
    E81002(81002, "用户拒收消息"), // 无。
    E88005(88005, "管理日历个人日历操作失败"), // 无。
    E89001(89001, "管理日历启动导出任务失败"), // 无。
    E89011(89011, "管理日历写入数据失败"), // 无。
    E89012(89012, "管理日历更新数据失败"), // 无。
    E90001(90001, "您的服务器调用钉钉开放平台所有接口的请求都被暂时禁用了"), // 无。
    E90002(90002, "您的服务器调用钉钉开放平台当前接口的所有请求都被暂时禁用了"), // 无。
    E90003(90003, "您的企业调用钉钉开放平台所有接口的请求都被暂时禁用了，仅对企业自己的Accesstoken有效"), // 无。
    E90004(90004, "您当前使用的CorpId及CorpSecret被暂时禁用了，仅对企业自己的Accesstoken有效"), // 无。
    E90005(90005, "您的企业调用当前接口次数过多，请求被暂时禁用了，仅对企业自己的Accesstoken有效"), // 无。
    E90006(90006, "您当前使用的CorpId及CorpSecret调用当前接口次数过多，请求被暂时禁用了，仅对企业自己的Accesstoken有效"), // 无。
    E90007(90007, "您当前要调用的企业的接口次数过多，对该企业的所有请求都被暂时禁用了，仅对企业授权给ISV的Accesstoken有效"), // 无。
    E90008(90008, "您当前要调用的企业的当前接口次数过多，对此企业下该接口的所有请求都被暂时禁用了，仅对企业授权给ISV的Accesstoken有效"), // 无。
    E90009(90009, "您调用企业接口超过了限制，对所有企业的所有接口的请求都被暂时禁用了，仅对企业授权给ISV的Accesstoken有效"), // 无。
    E90010(90010, "您调用企业当前接口超过了限制，对所有企业的该接口的请求都被暂时禁用了，仅对企业授权给ISV的Accesstoken有效"), // 无。
    E90011(90011, "您的套件调用企业接口超过了限制，该套件的所有请求都被暂时禁用了，仅对企业授权给ISV的Accesstoken有效"), // 无。
    E90012(90012, "您的套件调用企业当前接口超过了限制，该套件对此接口的所有请求都被暂时禁用了，仅对企业授权给ISV的Accesstoken有效"), // 无。
    E90013(90013, "您的套件调用当前企业的接口超过了限制，该套件对此企业的所有请求都被暂时禁用了，仅对企业授权给ISV的Accesstoken有效"), // 无。
    E90014(90014, "您的套件调用企业当前接口超过了限制，该套件对此企业该接口的所有请求都被暂时禁用了，仅对企业授权给ISV的Accesstoken有效"), // 无。
    E900001(900001, "加密明文文本非法"), // 加密明文不能为空。
    E900002(900002, "加密时间戳参数非法"), // 加密时间戳不能为空。
    E900003(900003, "加密随机字符串参数非法"), // 加密随机字符串不能为空。
    E900004(900004, "不合法的aeskey"), // 检查aeskey是否符合规格，长度固定为43个字符，从a-z, A-Z, 0-9共62个字符中选取，是AESKey的Base64编码。解码后即为32字节长的AESKey。
    E900005(900005, "签名不匹配"), // 检查签名计算的参数是否正确。个人免登：个人免登场景的签名计算方法第三方企业：第三方访问接口的签名计算方法
    E900006(900006, "计算签名错误"), // 检查签名计算的参数是否正确。个人免登：个人免登场景的签名计算方法第三方企业：第三方访问接口的签名计算方法
    E900007(900007, "计算加密文字错误"), // 检查是否安装JRE补丁或者对应的JRE版本是否正常。 请参考文档消息体加解密。
    E900008(900008, "计算解密文字错误"), // 检查是否安装JRE补丁或者对应的JRE版本是否正常。 请参考文档消息体加解密。
    E900009(900009, "计算解密文字长度不匹配"), // 检查aeskey是否符合规格。长度固定为43个字符，从a-z, A-Z, 0-9共62个字符中选取，是AESKey的Base64编码。
    E900010(900010, "计算解密文字corpid不匹配"), // 检查corpid是否正确或者是否为当前企业的corpid。企业内部应用：检查corpid是否正确或者是否为当前企业的corpid；定制服务商开发应用：检查customKey是否正确；第三方企业应用：检查suiteKey是否正确；
    E400010(400010, "激活的设备不存在（未绑定）"), // 无。
    E400011(400011, "设备已经激活"), // 无。
    E400020(400020, "无访问权限"), // 无。
    E400021(400021, "密钥错误"), // 无。
    E400022(400022, "设备不存在"), // 无。
    E400023(400023, "用户不存在"), // 无。
    E400040(400040, "回调不存在"), // 检查是否注册回调事件。可通过查询订阅事件接口获取。
    E400041(400041, "回调已经存在"), // 检查该回调事件是否已注册过。可通过查询订阅事件接口获取。
    E400042(400042, "企业不存在"), // 无。
    E400043(400043, "企业不合法"), // 无。
    E400050(400050, "回调地址无效"), // 检查回调地址是否正确或者符合地址格式。
    E400051(400051, "回调地址访问异常"), // 回调地址必须部署到外网以便开发平台通过回调地址推送回调信息。
    E400052(400052, "回调地址访返回数据错误"), // 无。
    E400053(400053, "回调地址在黑名单中无法注册"), // 回调地址已添加黑名单，无法注册。
    E400054(400054, "回调URL访问超时"), // 无。
    E400055(400055, "回调设备不在线"), // 无。
    E400056(400056, "回调访问设备失败"), // 无。
    E400057(400057, "回调访问设备不存在"), // 无。
    E420001(420001, "客户不存在"), // 无。
    E420002(420002, "客户查询失败"), // 无。
    E420003(420003, "联系人不存在"), // 无。
    E420004(420004, "联系人查询失败"), // 无。
    E420005(420005, "客户删除失败"), // 无。
    E420006(420006, "联系人删除失败"), // 无。
    E420007(420007, "跟进人绑定失败"), // 无。
    E420008(420008, "客户id非法"), // 无。
    E420009(420009, "跟进人id非法"), // 无。
    E4200010(4200010, "客户联系人id非法"), // 无。
    E4200011(4200011, "客户描述表单不存在"), // 无。
    E4200012(4200012, "户描述表单查询失败"), // 无。
    E4200013(4200013, "联系人描述表单不存在"), // 无。
    E4200014(4200014, "联系人描述表单查询失败"), // 无。
    E4200015(4200015, "客户描述表单格式校验错误"), // 无。
    E4200016(4200016, "客户描述表单格缺少固定字段"), // 无。
    E4200017(4200017, "客户联系人描述表单格式校验错误"), // 无。
    E4200018(4200018, "客户联系人描述表单格缺少固定字段"), // 无。
    E4200019(4200019, "客户描述表单数据格式校验错误"), // 无。
    E4200020(4200020, "客户描述表单数据缺少固定字段"), // 无。
    E4200021(4200021, "客户联系人描述表单数据格式校验错误"), // 无。
    E4200022(4200022, "客户联系人描述表单数据缺少固定字段"), // 无。
    E800001(800001, "仅限ISV调用"), // 只有ISV微应用才能调用
    E41042(41042, "加密失败"), // 无。
    E41043(41043, "解密失败"), // 无。
    E40100(40100, "分机号已经存在"), // 无。
    E40101(40101, "邮箱已经存在"), // 无。
    E50002(50002, "企业员工不在授权范围"), // 1. 检查是否不在可见范围（登录开发者后台 > 企业内部应用-应用详情-版本管理与发布-可使用范围设置）2. 检查是否在授权范围内（登录开发者后台 > 企业内部应用 > 应用详情 > 权限管理 > 添加接口权限 > 通讯录权限 > 授权范围）
    E50004(50004, "企业部门不在授权范围"), // 1. 检查是否不在可见范围（登录开发者后台 > 企业内部应用-应用详情-版本管理与发布-可使用范围设置）2. 检查是否在授权范围内（登录开发者后台 > 企业内部应用 > 应用详情 > 权限管理 > 添加接口权限 > 通讯录权限 > 授权范围）
    E33013(33013, "企业自建微应用的个数过多，通过接口创建微应用受限"), // 此限制只针对企业自建微应用，对ISV应用没有限制。
    E90017(90017, "此IP使用CorpId及CorpSecret调用接口的CorpId个数超过限制"), // 从该ip发起超过XX个corpid的请求被限制。
    E40102(40102, "过期的临时授权码"), // 临时授权只能使用一次后就不能在使用。 需要重新执行授权操作有开放平台推送新的临时授权码。
    E52020(52020, "未找到服务窗授权"), // 无。
    E52021(52021, "未找到微应用授权"), // 无。
    E52022(52022, "无效的jsapi类型"), // 无。
    E52023(52023, "无效的服务窗agentid"), // 检查服务窗微应用是否停用或者删除，可通过查询服务号列表接口查询。
    E52024(52024, "无效的jsapi tag"), // 无。
    E52025(52025, "无效的安全微应用"), // 无。
    E52026(52026, "无效的安全微应用URL"), // 无。
    E71014(71014, "获取套件下的服务窗应用失败"), // 无。
    E72003(72003, "钉盘空间添加文件失败"), // 无。
    E60128(60128, "无效的主管id"), // 无。
    E200001(200001, "表单不能为空"), // 无。
    E200002(200002, "分页参数index或offset不合法"), // 检查一下对应接口的分页参数。
    E200003(200003, "分页大小不合法"), // 检查一下对应接口的分页参数。
    E200004(200004, "APP_ID 不允许为空"), // app_id为创建套件成功后，创建的ISV微应用的微应用ID。 可以登录开发者后台查看。
    E200005(200005, "表单名称不允许为空"), // 无。
    E200006(200006, "表单内容不允许为空"), // 无。
    E200007(200007, "表单值不允许为空"), // 无。
    E200008(200008, "表单uuid不存在"), // 无。
    E400001(400001, "系统错误"), // 无。
    E400002(400002, "参数错误"), // 检查参数是否符合规格。具体请参考当前接口的文档的参数说明和参数示例。
    E400003(400003, "时间戳无效"), // 检查随机时间戳是否符合规格。具体请参考当前接口的文档的参数说明和参数示例
    E820001(820001, "发起审批实例失败，错误原因为【系统错误:Could not convert xml to bpmnModel.】"), // processCode值不正确，请检查processCode。
    E810002(810002, "复制的审批流已超过最大数量"), // 一个企业最多可创建100个模板，超过最大数量后调用接口会报错。
    E830001(830001, "无错误信息"), // 审批模板不存在，或者是processCode值不正确导致，请检查processCode。
    E850012(850012, "无错误信息"), // from_time和to_time时间差超过了31天，请检查参数。
    E853001(853001, "timestamp参数格式不正确，必须是当前时间的毫秒数"), // 检查timestamp参数格式。
    E853002(853002, "timestamp参数不合法，该参数值与钉钉服务器当前时间相差超过1分钟"), // 检查服务器的时间。
    E853003(853003, "accessKey参数不合法，必须是钉钉开放平台存在的appId"), // 检查accessKey参数。
    E853004(853004, "signature参数不正确，与钉钉服务端计算出来的签名不一致，注意该参数传递时必须urlEncode"), // 检查signature参数
    E400004(400004, "随机数无效"), // 检查随机随机数是否符合规格。具体请参考当前接口的文档的参数说明和参数示例。
    E810003(810003, "审批流表单格式错误"), // 检查下审批表单，去除不支持的控件。

    ;

    private Integer code;
    private String msg;

    private ErrorCode(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public Integer getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }

    public static ErrorCode findByCode(Integer code) {
        if (code == null) {
            return null;
        }
        for (ErrorCode item : values()) {
            if (item.code.equals(code)) {
                return null;
            }
        }
        return null;
    }
}
